package com.cmc.cloud.cmclink.doc.service;

import java.util.*;
import javax.validation.*;

import com.cmc.cloud.cmclink.doc.vo.FilterConditionVO;
import com.cmc.cloud.cmclink.doc.vo.FilterFieldVO;
import com.cmc.cloud.cmclink.doc.vo.voyagebsacbadetailvo.VoyageBsaCbaDetailCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.voyagebsacbadetailvo.VoyageBsaCbaDetailPageReqVO;
import com.cmc.cloud.cmclink.doc.vo.voyagebsacbadetailvo.VoyageBsaCbaDetailRespVO;
import com.cmc.cloud.cmclink.doc.vo.voyagebsacbadetailvo.VoyageBsaCbaDetailUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.voyagebsacbadetailvo.VoyageCbaDetailBatchVO;
import com.cmes.framework.common.pojo.PageResult;
import com.cmc.cloud.cmclink.doc.entity.VoyageBsaCbaDetailDO;

/**
 * 分类舱位自动批舱匹配条件 Service 接口
 *
 * @author 集运管理员
 */
public interface VoyageBsaCbaDetailService {

    /**
     * 创建分类舱位自动批舱匹配条件
     *
     * @param createReqVO 创建信息
     */
    void createVoyageBsaCbaDetail(@Valid VoyageBsaCbaDetailCreateReqVO createReqVO);

    /**
     * 更新分类舱位自动批舱匹配条件
     *
     * @param updateReqVO 更新信息
     */
    void updateVoyageBsaCbaDetail(@Valid VoyageBsaCbaDetailUpdateReqVO updateReqVO);

    /**
     * 删除分类舱位自动批舱匹配条件
     *
     * @param id 编号
     */
    void deleteVoyageBsaCbaDetail(Long id);

    /**
     * 获得分类舱位自动批舱匹配条件
     *
     * @param id 编号
     * @return 分类舱位自动批舱匹配条件
     */
    VoyageBsaCbaDetailDO getVoyageBsaCbaDetail(Long id);

    /**
     * 获得分类舱位自动批舱匹配条件
     *
     * @param voyageBsaCbaId 编号
     * @return 分类舱位自动批舱匹配条件
     */
    VoyageBsaCbaDetailRespVO getByMainId(Long voyageBsaCbaId);

    /**
     * 获得分类舱位自动批舱匹配条件列表
     *
     * @param ids 编号
     * @return 分类舱位自动批舱匹配条件列表
     */
    List<VoyageBsaCbaDetailDO> getVoyageBsaCbaDetailList(Collection<Long> ids);

    /**
     * 获得分类舱位自动批舱匹配条件分页
     *
     * @param pageReqVO 分页查询
     * @return 分类舱位自动批舱匹配条件分页
     */
    PageResult<VoyageBsaCbaDetailDO> getVoyageBsaCbaDetailPage(VoyageBsaCbaDetailPageReqVO pageReqVO);

    /**
     * 批量增量 对分类舱位添加 条件过滤信息  目前默认增量的逻辑连接符号为 and
     *
     * @param detailBatchVO
     * @return void
     */
    void batchSaveDetail(VoyageCbaDetailBatchVO detailBatchVO);

    /**
     * 字段信息
     * @param enumType
     * @param keyWord
     * @return 字段信息
     */
    List<FilterFieldVO> getFilterInfo(String enumType, String keyWord);

    /**
     * 条件表达式信息
     * @param keyWord
     * @return 条件表达式信息
     */
    List<FilterConditionVO> getFilterConditionInfo(String keyWord);
}
